/**
 * 在数组中查找满足给定函数的元素的索引。
 *
 * @param ary 数组。
 * @param fn 用于查找元素的函数。
 * @returns 返回找到的元素在数组中的索引，如果未找到则返回 -1。
 */
export function findIndex<T = Record<string, any>>(ary: Array<T>, fn: (...args: any[]) => any): number {
  if (ary.findIndex)
    return ary.findIndex(fn)

  let index = -1
  ary.some((item: T, i: number, ary: Array<T>) => {
    const ret: T = fn(item, i, ary)
    if (ret) {
      index = i
      return ret
    }
    return undefined
  })
  return index
}

/**
 * 将数组按指定大小拆分成多个子数组
 *
 * @param array 待拆分的数组
 * @param chunkSize 每个子数组的最大长度
 * @returns 拆分后的子数组数组
 */
export function splitArrayChunks<T = any>(array: T[], chunkSize: number) {
  const chunks: T[][] = []
  for (let i = 0; i < array.length; i += chunkSize) {
    chunks.push(array.slice(i, i + chunkSize))
  }
  return chunks
}
